JDK中已经帮我们实现了十进制 转 二进制、八进制、十六进制的功能,使用Integer.toBinaryString(x)、Integer.toOctalString(x)、Integer.toHexString(x) 即可将x转换为对应的二进制、八进制、十六进制形式。我们也可以通过位移运算来实现求二进制、八进制、十六进制的功能。
示例代码
@Test
public void test02(){
//使用JDK实现
int x = -99;
System.out.println(x+"="+Integer.toBinaryString(x));
System.out.println(x+"="+Integer.toOctalString(x));
System.out.println(x+"="+Integer.toHexString(x));
}
@Test
public void test01(){
int x = -99;
System.out.println(x+"="+toBin(x));
System.out.println(x+"="+toBa(x));
System.out.println(x+"="+toHex(x));
}
/*
* 十进制-->二进制
*/
public String toBin(int num) {
return trans(num, 1, 1);
}
/*
* 十进制-->八进制
*/
public String toBa(int num) {
return trans(num, 7, 3);
}
/*
* 十进制-->十六进制
*/
public String toHex(int num) {
return trans(num, 15, 4);
}
public String trans(int num, int base, int offset) {
if (num == 0) {
return null;
}
char[] chs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
char[] arr = new char[32];
int pos = arr.length;
while (num != 0) {
int temp = num & base;
arr[--pos] = chs[temp];
num = num >>> offset;
}
StringBuilder sb = new StringBuilder();
for (int x = pos; x < arr.length; x++) {
sb.append(arr[x]);
}
return sb.toString();
}
最近在做项目时需要将一个byte数组 按6bit一组进行重新组合,研究了一下实现了这个功能
实现代码
@org.junit.Test
public void test02(){
byte b = 65;
// byte b = -86;
String str = getAllBinaryBits(b);
System.out.println(str);
}
/**
* 将每一个字节转换为8位二进制字符串形式
* @param b
* @return
*/
private String getAllBinaryBits(byte b) {
StringBuffer sb = new StringBuffer();
sb.append((b & 128)==0?0:(b & 128)>>7);
sb.append((b & 64)==0?0:(b & 64)>>6);
sb.append((b & 32)==0?0:(b & 32)>>5);
sb.append((b & 16)==0?0:(b & 16)>>4);
sb.append((b & 8)==0?0:(b & 8)>>3);
sb.append((b & 4)==0?0:(b & 4)>>2);
sb.append((b & 2)==0?0:(b & 2)>>1);
sb.append(b & 1);
// System.out.println(sb.toString());
return sb.toString();
}
要转换byte数组,套上一个for循环即可